﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Dominio;
using LogicaNegocios.Manager;
using System.IO;
using LogicaNegocios.Exceptions;
using Servicios.Notificacion;

namespace UIWeb
{
    public partial class MantenimientoAtletaEquipo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            UsuarioManager um = UsuarioManager.GetManager();
            if (Session["userLogin"] == null)
            {
                Response.Redirect("~/UserLogin.aspx");
            }
            else
            {
                if (um.esSeguidor((Usuario)Session["userLogin"]) || um.noTieneRol((Usuario)Session["userLogin"]))
                    if (um.esAdmin((Usuario)Session["userLogin"]))
                    {
                        Response.Redirect("~/Default.aspx");
                    }
                    else
                        Response.Redirect("~/Default_seguidores.aspx");
                else
                {

                    if (!IsPostBack)
                    {
                        CargarPaises();
                        CargarDeportes();
                        //ScriptManager sm = ScriptManager.GetCurrent(this.Page);
                        //ScriptManager1.RegisterPostBackControl(FileUploadFoto);
                        CargarPlanillaAtletasEquipos();

                    }
                }
            }
        }


        private void CargarPlanillaAtletasEquipos()
        {
            List<Participante> participantes = ParticipanteManager.GetManager().GetAtletasEquipos();
            GridViewAtletasEquipos.DataSource = participantes;
            GridViewAtletasEquipos.DataBind();
        }

        private void CargarPaises()
        {
            List<Pais> paises = ParticipanteManager.GetManager().GetPaises();
            DropDownListPaises.DataSource = paises;
            DropDownListPaises.DataTextField = "Nombre";
            DropDownListPaises.DataValueField = "Id";
            DropDownListPaises.DataBind();

        }

        private void CargarDeportes()
        {
            List<Deporte> deportes = DeporteManager.GetManager().GetDeportes();
            CheckBoxListDeportes.DataSource = deportes;
            CheckBoxListDeportes.DataBind();
        }

        protected void lnkAlta_Click(object sender, EventArgs e)
        {
            try
            {
                lblError.Visible = false;
                Participante participante = null;

                if (RadioButtonParticipante.Items[0].Selected)
                {
                    participante = new Atleta();
                }
                else
                {
                    participante = new Equipo();
                }

                participante.Nombre = txtNombre.Text;
                participante.Pais = new Pais();
                participante.Pais.Id = int.Parse(DropDownListPaises.SelectedValue);

                foreach (ListItem li in CheckBoxListDeportes.Items)
                {
                    if (li.Selected)
                    {
                        Deporte deporte = new Deporte();
                        deporte.Id = int.Parse(li.Value);
                        participante.Deportes.Add(deporte);
                    }
                }

                if (FileUploadFoto.FileName != "")
                {
                    if (FileUploadFoto.PostedFile.ContentType == "image/jpeg")
                    {
                        if (FileUploadFoto.PostedFile.ContentLength < 1024000)
                        {
                            string filename = Path.GetFileName(FileUploadFoto.FileName);
                            string path = Server.MapPath("~/");
                            FileUploadFoto.SaveAs(path + "Images/Participantes/" + filename);
                            participante.Foto = "Images/Participantes/" + filename;
                        }
                        else
                        {
                            throw new AtletaEquipoException("Upload status: El archivo debe ser menor a 1 mb");
                        }

                    }
                    else
                    {
                        throw new AtletaEquipoException("Upload status: Solo se aceptan imagenes jpeg!");
                    }
                }

                ParticipanteManager.GetManager().CrearAtletaEquipo(participante);
                CargarPlanillaAtletasEquipos();

            }
            catch (AtletaEquipoException ex)
            {
                lblError.Text = ex.Message;
            }
        }


        protected void lnkModificar_Click(object sender, EventArgs e)
        {
            try
            {
                if (GridViewAtletasEquipos != null)
                {
                    lblError.Visible = false;
                    int indice = GridViewAtletasEquipos.SelectedIndex;
                    ParticipanteManager partMgr = ParticipanteManager.GetManager();
                    int id = int.Parse(GridViewAtletasEquipos.DataKeys[indice].Value.ToString());
                    Participante participante = partMgr.GetAtletaEquipo(id);


                    if (RadioButtonParticipante.Items[0].Selected)
                    {
                        participante = new Atleta();
                    }
                    else
                    {
                        participante = new Equipo();
                    }

                    participante.Id = id;

                    participante.Nombre = txtNombre.Text;
                    participante.Pais = new Pais();
                    participante.Pais.Id = int.Parse(DropDownListPaises.SelectedValue);

                    foreach (ListItem li in CheckBoxListDeportes.Items)
                    {
                        if (li.Selected)
                        {
                            Deporte deporte = new Deporte();
                            deporte.Id = int.Parse(li.Value);
                            participante.Deportes.Add(deporte);
                        }
                    }

                    if (FileUploadFoto.FileName != "")
                    {
                        if (FileUploadFoto.PostedFile.ContentType == "image/jpeg")
                        {
                            if (FileUploadFoto.PostedFile.ContentLength < 1024000)
                            {
                                string filename = Path.GetFileName(FileUploadFoto.FileName);
                                string path = Server.MapPath("~/");
                                FileUploadFoto.SaveAs(path + "Images/Participantes/" + filename);
                                participante.Foto = "Images/Participantes/" + filename;
                            }
                            else
                            {
                                throw new AtletaEquipoException("Upload status: El archivo debe ser menor a 1 mb");
                            }

                        }
                        else
                        {
                            throw new AtletaEquipoException("Upload status: Solo se aceptan imagenes jpeg!");
                        }
                    }

                    ParticipanteManager.GetManager().ModificarAtletaEquipoPrincipal(participante);
                    ParticipanteManager.GetManager().ModificarAtletaEquipoDeportes(participante);
                    CargarPlanillaAtletasEquipos();
                    borrarCampos();
                }
            }
            catch (AtletaEquipoException ex)
            {
                lblError.Text = ex.Message;
                lblError.Visible = true;
            }
        }



        protected void GridViewAtletasEquipos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

        }

        protected void GridViewAtletasEquipos_PageIndexChanged(object sender, EventArgs e)
        {

        }

        protected void borrarCampos()
        {
            lblError.Text = string.Empty;
            txtNombre.Text = string.Empty;
            foreach (ListItem li in CheckBoxListDeportes.Items)
            {
                li.Selected = false;

            }
            //  ImageParticipante.ImageUrl="~/Images/usuariosinfoto.gif";


        }

        protected void GridViewAtletasEquipos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (GridViewAtletasEquipos.SelectedRow != null)
            {
                borrarCampos();
                int indice = GridViewAtletasEquipos.SelectedIndex;
                ParticipanteManager partMgr = ParticipanteManager.GetManager();
                int id = int.Parse(GridViewAtletasEquipos.DataKeys[indice].Value.ToString());
                Participante participante = partMgr.GetAtletaEquipo(id);

                txtNombre.Text = participante.Nombre;

                if (participante.TipoParticipante == Participante.Tipo.Atleta.ToString())
                {
                    RadioButtonParticipante.Items[0].Selected = true;
                }
                else
                {
                    RadioButtonParticipante.Items[1].Selected = true;
                }

                foreach (ListItem li in CheckBoxListDeportes.Items)
                {
                    foreach (Deporte deporte in participante.Deportes)
                    {
                        if (deporte.Id == int.Parse(li.Value))
                        {
                            li.Selected = true;
                        }
                    }
                }

                if (participante.Foto != null && participante.Foto != "")
                {
                    ImageParticipante.ImageUrl = "~/" + participante.Foto;
                }

                DropDownListPaises.SelectedValue = participante.Pais.Id.ToString();
            }




        }

        protected void lnkEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                lblError.Visible = false;
                int indice = GridViewAtletasEquipos.SelectedIndex;
                ParticipanteManager partMgr = ParticipanteManager.GetManager();
                int id = int.Parse(GridViewAtletasEquipos.DataKeys[indice].Value.ToString());
                Participante participante = partMgr.GetAtletaEquipo(id);
                ParticipanteManager.GetManager().EliminarAtletaEquipo(participante);
                CargarPlanillaAtletasEquipos();
                borrarCampos();
            }
            catch (Exception ex)
            {
                lblError.Text = ex.Message;
                lblError.Visible = true;
            }
        }

        protected void lnkbUpload_Click(object sender, EventArgs e)
        {
            int o = 3;
            string f = FileUploadFoto.FileName;
        }

        protected void LinkButton2_Click(object sender, EventArgs e)
        {
            Session["userLogin"] = null;
            Response.Redirect("UserLogin.aspx");
        }
         


        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            try
            {
                int id = int.Parse(HiddenIdParticipante.Value);
                if (TextComentario.Text != string.Empty)
                {

                    ParticipanteManager pm = ParticipanteManager.GetManager();
                    pm.AgregarAtletaEquipoComentario(id, TextComentario.Text);
                    INotificacion notificacion = new Notificacion();
                    List<Usuario> usuariosSeguidores = UsuarioManager.GetManager().GetUsuariosSeguidores(id);
                    Participante participante = ParticipanteManager.GetManager().GetAtletaEquipo(id);
                    foreach(Usuario usuario in usuariosSeguidores)
                    {
                        notificacion.SendMail("Se agregó un nuevo comentario del participante:" + participante.Nombre + "'\n'" +  TextComentario.Text, usuario.Email);
                    }
                    
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


    }
}